Cteni zaznamu z .LNK
Otázka od: Pavel !
20. 9. 2004 18:58
Kdyz jsem se dival do FAQ na delphi.cz tak jsem nasel navod jak vytvorit
LNK a z toho jsem se odvodil jak nacist soubor a zjistit cestu.
Tento algoritmus funguje sprane jenom na zastupce vytvorene pomoci
Delphi. Jinak vyhodi hlasku "Access violation at XXXX read of adress
YYYY "
ale cestu lze zobrazit . Procedura najde osetrit ani TRY EXCEPT.
Protoze vyjimka vznika asi v jinem prog.
Co s tim ? Kde je chyba
uses ActiveX, Comobj, ShlObj;
procedure LNKRead(WFileNname : WideString;hnd : hwnd;var res :
TWin32FindData);
var
MyObject : IUnknown;
MySLink : IShellLink;
MyPFile : IPersistFile;
PFileName : PChar;
hres : HRESULT;
pfd: TWin32FindData;
begin
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;
if MyPFile.Load(PWchar(WFileNname),STGM_READ) <> S_OK then
messagebox(hnd,'Chyba !!','',mb_ok);
MySLink.Resolve(hnd,SLR_ANY_MATCH);
if SUCCEEDED(hres) then else messagebox(hnd,'Chyba !!','',mb_ok);
hres := MySLink.GetPath(PFileName,MAX_PATH,PFD,SLGP_SHORTPATH) ;
if SUCCEEDED(hres) then begin res := PFD;
end;
diky
Odpovedá: Slavomir Skopalik
20. 9. 2004 19:20
Nevim kde je chyba, ale co takle to zkusit krokovat ?
Slavek
> Tento algoritmus funguje sprane jenom na zastupce vytvorene
> pomoci Delphi. Jinak vyhodi hlasku
"Access violation at XXXX
> read of adress YYYY " ale cestu lze zobrazit .
Procedura
> najde osetrit ani TRY EXCEPT. Protoze vyjimka vznika asi v
> jinem prog.
>
Odpovedá: Jiri Cincura
20. 9. 2004 19:36
Pavel ! wrote:
> Kdyz jsem se dival do FAQ na delphi.cz tak jsem nasel navod jak vytvorit
> LNK a z toho jsem se odvodil jak nacist soubor a zjistit cestu.
>
> Tento algoritmus funguje sprane jenom na zastupce vytvorene pomoci
> Delphi. Jinak vyhodi hlasku
"Access violation at XXXX read of adress YYYY
> " ale cestu lze zobrazit .
Procedura najde osetrit ani TRY EXCEPT.
> Protoze vyjimka vznika asi v jinem prog.
>
> Co s tim ? Kde je chyba
>
> uses ActiveX, Comobj, ShlObj;
>
> procedure LNKRead(WFileNname : WideString;hnd : hwnd;var res :
> TWin32FindData);
> var
> MyObject : IUnknown;
> MySLink : IShellLink;
> MyPFile : IPersistFile;
>
> PFileName : PChar;
> hres : HRESULT;
> pfd: TWin32FindData;
>
> begin
> MyObject := CreateComObject(CLSID_ShellLink);
> MySLink := MyObject as IShellLink;
> MyPFile := MyObject as IPersistFile;
>
> if MyPFile.Load(PWchar(WFileNname),STGM_READ) <> S_OK then
> messagebox(hnd,'Chyba !!','',mb_ok);
>
> MySLink.Resolve(hnd,SLR_ANY_MATCH);
> if SUCCEEDED(hres) then else messagebox(hnd,'Chyba !!','',mb_ok);
>
> hres := MySLink.GetPath(PFileName,MAX_PATH,PFD,SLGP_SHORTPATH) ;
> if SUCCEEDED(hres) then begin res := PFD;
>
> end;
>
>
> diky
Pokud to obalis cele try .. except, tak by to melo jit, ne? Pak bych zkusil
krokovat, nebo posouvat except "nahoru".
--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net
Odpovedá: Petr Vones
21. 9. 2004 11:26
From: "Pavel !" <paullb@seznam.cz>
> Kdyz jsem se dival do FAQ na delphi.cz tak jsem nasel navod jak vytvorit
> LNK a z toho jsem se odvodil jak nacist soubor a zjistit cestu.
Pouzij uz hotovou funkci ShellLinkResolve (unit JclShell) z JCL:
http://sourceforge.net/projects/jcl
Petr Vones
Odpovedá: Pavel !
21. 9. 2004 19:31
Kdyz se dame hned po "begin" try a nad konecne "end" except, tak me to
take vyhodi chybu (pokud otevru jiny soubor nez vytvoreny necim jinym).
Kdyz se pokusm o krokovani tak me to chybu nenaznaci, ale jak se
dokrokuju az na konecne END tak me to vyhodi chybu. Ale zjistil jsem ze
pokud hodim komentar
pred :
// hres := MySLink.GetPath(PFileName,MAX_PATH,PFD,SLGP_SHORTPATH) ;
tak to chybu nehodi, ale co me to je platne, kdyz potrebuji vystup z
ukazatele PFileName !
Ale dost mozna ze je to chyba v mojim OS. Vam tento muj algoritmus
funguje uspesne ?
Pavel
----- Orig.
Pokud to obalis cele try .. except, tak by to melo jit, ne? Pak bych
zkusil
krokovat, nebo posouvat except "nahoru".
Pavel ! wrote:
> Kdyz jsem se dival do FAQ na delphi.cz tak jsem nasel navod jak
vytvorit
> LNK a z toho jsem se odvodil jak nacist soubor a zjistit cestu.
>
> Tento algoritmus funguje sprane jenom na zastupce vytvorene pomoci
> Delphi. Jinak vyhodi hlasku
"Access violation at XXXX read of adress
YYYY
> " ale cestu lze zobrazit .
Procedura najde osetrit ani TRY EXCEPT.
> Protoze vyjimka vznika asi v jinem prog.
>
> Co s tim ? Kde je chyba
>
> uses ActiveX, Comobj, ShlObj;
>
> procedure LNKRead(WFileNname : WideString;hnd : hwnd;var res :
> TWin32FindData);
> var
> MyObject : IUnknown;
> MySLink : IShellLink;
> MyPFile : IPersistFile;
>
> PFileName : PChar;
> hres : HRESULT;
> pfd: TWin32FindData;
>
> begin
> MyObject := CreateComObject(CLSID_ShellLink);
> MySLink := MyObject as IShellLink;
> MyPFile := MyObject as IPersistFile;
>
> if MyPFile.Load(PWchar(WFileNname),STGM_READ) <> S_OK then
> messagebox(hnd,'Chyba !!','',mb_ok);
>
> MySLink.Resolve(hnd,SLR_ANY_MATCH);
> if SUCCEEDED(hres) then else messagebox(hnd,'Chyba !!','',mb_ok);
>
> hres := MySLink.GetPath(PFileName,MAX_PATH,PFD,SLGP_SHORTPATH) ;
> if SUCCEEDED(hres) then begin res := PFD;
>
> end;
>
>
> diky